23

» WarCraft 3 / вопрос по удалению спецэффектов

Похожие вопросы:

ответ
koloff, только что проверил, если нет анимации death у эффекта, то он исчезает спустя несколько секунд после вызова функции DestroyEffect
ответ
Steal nerves:
void - это nothing то есть ничего не возвращает функция, а саму функции называют doTheThing, а unit u - аргументы функции, мануалы про cjass почитай (хотя я тоже соглашусь, что написано очень плохо в мануалах. Нужно попробовать немного самим пописать коды)
можно представить как (если хорошо понимаешь jass)
function doTheThing takes unit u returns nothing
... //что-то делаешь с юнитом u (берем аргумент функции - unit u)
endfunction
GetMyUnit - такой не существует, видимо Док имеет в виду подставить свою переменную
пример
например составил пример функции - определить уровень абилы юнита. Функция называется LV, u - юнит, id - целое число, равкод абилы. Возвращает целое число (уровень абилы).
function LV takes unit u, integer id returns integer
return GetUnitAbilityLevel(u, id)
endfunction 
'A000' - равкод абилы
local integer lv = LV(GetTriggerUnit(), 'A000') //узнаем уровень героя
и честно не понял вопрос темы?
ответ
Steal nerves, Я сделал с детектором бафа обычного лечение, здоровье восстанавливаю триггерно, забил на ауру.

23

» WarCraft 3 / Способность через триггер

Похожие вопросы:

ответ
Урон настраивается через уровень способности, или как было сказано unit - damage target
команда для использования нестандартной способности берется от той способности, на основе которой ты её сделал, и если это цепь тралла - Unit - issue order with targetign a unit - orc - chain lighting
ответ
И в правду рак мозга...
Статьи почитать не судьба? Некоторые предметные способности не повышают уровень - точнее эффект от повышения уровня не изменяется, посему делают 5 (100500) способностей с разными бонусами и выдаются юниту в нужный момент.
Способность маски соби - повышает базовый реген маны и бонус от интеллекта, так что крипам с 0 манарегена эта способность ничего не добавит.
ответ
Собственные попытки в студию, что не получается?
Напомним - ЭТО НЕ СТОЛ ЗАКАЗОВ, здесь задают вопросы про реализацию тех или иных вопросов, спрашивают про ошибки, оптмизацию, отдельные функции. Я не увидел в вашем вопросе ничего кроме невнятного описания механики способности, " вокргу кого то там огненные столбы возникают, и еще порча"...
ответ
возможные способности, господи, строчка выше, вы хотяб проверяли все сами а не ждали иисуса с небес
там даже подпись категории - способности
ответ
  1. тебе нужен не уровень героя, а уровень способности
  2. здоровье нужно устанавливать на текущее здоровье триггеринг юнит + нужное число + уровень способности твоей абилы умножить на нужное число (там сам смотри, сколько она дамажит)
  3. убери вейт, нормальный таймер ты все равно сейчас не раскуришь, пусть хилит мгновенно после каста, чуть некрасиво, зато относительно нормальный код получится
//////////
  1. в идеале вообще любой такой отхил элементарно делается на вешание событий получения урона кому надо и при них и отхил наносящего, там как раз и отхилится именно на сколько нанёс, а не как у тебя, но это ты имхо опять же еще не раскуришь

23

» WarCraft 3 / Как сделать стандартного воина героем?

Похожие вопросы:

ответ
В этом архиве ищи свои скиллы, в [скобках] смотри нужный ID.
ответ
Ладно, поставил разрешение в Варке на максимум, более или менее нормальный масштаб миникарт получается, всем спасибо за попытки помочь.
ответ
Уже решил.для тех кто будет искать данный вопрос - можно использовать свиток регенерации(Раса:люди),он игнорирует сколько у вас хп и имеет длительность.
ответ
Создаешь триггер, в событие ставишь период и в действия - изменение переменной. Хз в чём тут может быть трабл. Событие - "время - periodic", Действие - "set variable". Или как-то так. Первое найти легко, там список всего ничего, а второе так и вовсе четвертая строчка (если не ошибаюсь).
Совсем забыл - xgm.guru/p/wc3/articles
ответ
BrEd Pitt:
Событие - Игрок Сохраняет игру
Действие - Set Defeat from picked player
В принципе это не запрещает, но является для игрока невыгодным.

23

» WarCraft 3 / Погрузить на корабль

Похожие вопросы:

ответ
Хеш-таблица в которую ты будешь запоминать всех кто сел на корабль или группа. Короче, любое место в котором можно хранить несколько юнитов. При погружении на корабль, запоминаешь юнита. Удаляешь его из игры. Потом в нужный момент моздаешь такого же.Или просто выгружаешь и скрываешь, в нужный момент потом просто передвинуть и показать этого юнита. Вот и все...
ответ
через переменную случайное число

23

» WarCraft 3 / вопрос по моделированию

Похожие вопросы:

ответ
Делается ось через ось.
когда одна вращается по Х другая может по У и так далее
ответ
перекрась через фотошоп
Вот упрощённая онлайн версий:
Но для начала переведи текстуру в формат jpg\png, далее волшебной палочкой двойным щелчком повыделяй нужный\ нужные тебе сегменты для перекраски. Залей их нужным тебе цветом. Сохрани в png. Экспортируй png => blp.
И всё!
Всё что тебе понадобится: скаченный BLP laboratory, war3ModelEditor
и pixlr.com/editor/?loc=ru?loc=ru
ответ

23

» WarCraft 3 / Глобальная карта

Похожие вопросы:

ответ
Zeuz:
DazzleFirst, возможно ли как то создать локальный триггер при применении способности и уничтожить обратно?
ведь обычно локальные триггеры как правило при применении способности создаются в инициализации карты...
нет нужды выделять еще один триггер (помимо отлова) на заклинание, если оно не слишком громоздкое в плане исполнения.
Как сообщает товарищ nvc123:
Zeuz, лучше не использовать много триггеров
вообще нету такой ситуации в которой надо много триггеров
стоит обратить на это внимание.
Везде и всюду есть свои нюансы которые нужно учитывать. Если не выполнить задуманное с помощью одного триггера, то делаем два.
ответ
Megacomp, это не джасс а вджасс
проверь включен ли у тебя джассхелпер
так же не забывай что перед тем как нажать "проверка карты" карту нужно сохранить
ответ
Ну можно координаты камеры игрока. Но там нужен синк в кеше, чтобы небыло десинха, а это уже ни ГУИ.
Вот примитивный пример получение и сохранения координат камеры игрока:
scope PlayerRelated initializer InitPlayers

    globals
        force AllPlayers = null
        trigger gg_trg_PlayerLeft = null
        playerevent bj_enumPlayerEventId = null
        player array PL
        gamecache data
    endglobals

    function TriggerRegisterPlayerEventEnum takes nothing returns nothing
        call TriggerRegisterPlayerEvent( bj_destInRegionDiesTrig, GetEnumPlayer( ), bj_enumPlayerEventId )
    endfunction
    
    function TriggerRegisterForceEvent takes trigger trig, force forforce, playerevent id returns nothing
        set bj_destInRegionDiesTrig = trig
        set bj_enumPlayerEventId = id
        call ForForce( forforce, function TriggerRegisterPlayerEventEnum )
    endfunction
 
    function Trig_Player_Left_Actions takes nothing returns nothing
        call ForceRemovePlayer( AllPlayers, GetTriggerPlayer( ) )
    endfunction
    
    function IsSlotPlayer takes player pl returns boolean
        return GetPlayerSlotState( pl ) == PLAYER_SLOT_STATE_PLAYING and GetPlayerController( pl ) == MAP_CONTROL_USER
    endfunction
    

    function InitPlayers takes nothing returns nothing
        set AllPlayers = CreateForce( )
        set gg_trg_PlayerLeft = CreateTrigger( )
        set data = InitGameCache( "Data.w3v" )
        
        set bj_forLoopAIndex = 0
        
        loop
        
            exitwhen bj_forLoopAIndex > bj_MAX_PLAYERS
        
            set PL[bj_forLoopAIndex] = Player( bj_forLoopAIndex )
            if IsSlotPlayer( PL[bj_forLoopAIndex] ) then
                call ForceAddPlayer( AllPlayers, PL[bj_forLoopAIndex] )
                call TriggerRegisterPlayerEvent( gg_trg_PlayerLeft, PL[bj_forLoopAIndex] , EVENT_PLAYER_LEAVE )
            endif
        
            set bj_forLoopAIndex = bj_forLoopAIndex + 1
        endloop
    
        call TriggerAddAction( gg_trg_PlayerLeft, function Trig_Player_Left_Actions )
    
    endfunction
endscope

function Trig_Get_Player_Screen_Cord_Conditions takes nothing returns boolean
    return true
endfunction

function Trig_Get_Player_Screen_Cord_Actions takes nothing returns nothing
    local player pl = GetTriggerPlayer( )
    local real dx = 0.00
    local real dy = 0.00

    
    if GetLocalPlayer( ) == pl then
        set dx = GetCameraEyePositionX( )
        set dy = GetCameraEyePositionY( )
    else
        set dx = 0.00
        set dy = 0.00
    endif

    call StoreReal( data, "Cord", "X", dx )
    call StoreReal( data, "Cord", "Y", dy )
    
    call TriggerSyncStart( )
    
    if GetLocalPlayer( ) == pl then
        call SyncStoredReal( data, "Cord", "X" )
        call SyncStoredReal( data, "Cord", "Y" )
    endif
    
    call TriggerSleepAction( 2.00 )

    call TriggerSyncReady( )
    
    set dx = GetStoredReal( data, "Cord", "X" )
    set dy = GetStoredReal( data, "Cord", "Y" )
    
    // далее делаем с коорданатами камеры что хочется!
    call PingMinimapEx( dx, dy, 3.00, 255, 255, 255, true )

endfunction

//===========================================================================
function InitTrig_Get_Player_Screen_Cord takes nothing returns nothing
    set gg_trg_Get_Player_Screen_Cord = CreateTrigger( )
    
    set bj_forLoopAIndex = 0
    
    loop
        exitwhen bj_forLoopAIndex > bj_MAX_PLAYERS
    
        if IsPlayerInForce( PL[bj_forLoopAIndex], AllPlayers ) then
            call TriggerRegisterPlayerChatEvent( gg_trg_Get_Player_Screen_Cord, PL[bj_forLoopAIndex], "-GetCord", true )
        endif
    
        set bj_forLoopAIndex = bj_forLoopAIndex + 1
    endloop
    
    call TriggerAddCondition( gg_trg_Get_Player_Screen_Cord, Condition( function Trig_Get_Player_Screen_Cord_Conditions ) )
    call TriggerAddAction( gg_trg_Get_Player_Screen_Cord, function Trig_Get_Player_Screen_Cord_Actions )
endfunction
ответ
Всё, разобрался, вопрос снимаю)
ответ
ScopteRectuS, Переменные инициализируются при инициализации карты, она же вроде как глобальная udg_HeroGFL_owner. Или в коде карты насильно инициализировать?
Они же не локалки
ScopteRectuS, м, реально null возвращает боевая единицы. Смешно. Окей: И как ему определить созданную во время игры боевую единицу?

23

» WarCraft 3 / Область с воздействием на юнита

Похожие вопросы:

ответ
Это из-за физического размера выбираемых воинов.
Если хотите сделать способность, которая будет работать также, как и стандартные, то при выборе воинов в качестве радиуса указываете нужный радиус + максимально возможный физический размер воинов на карте.
// 	Если перебор воинов идёт через цикл:
	call GroupEnumUnitsInRange( group, x, y, SPELL_RADIUS + MAX_COLLIZION_SIZE, boolexpr )
	loop
//		...
		set enumUnit = FirstOfGroup( group )
//		...
		if IsUnitEnemy( enumUnit, player ) and IsUnitInRangeXY( enumUnit, x, y, SPELL_RADIUS ) then
			call DoSomething( )
		endif
//		...
	endloop
Как показано выше, с помощью функции IsUnitInRange( ) мы можем отсеять воинов, которые не попали в радиус действия способности, но были выбраны в группу из-за того, что мы указали в функции GroupEnumUnitsInRange( ) радиус чуть больше нужного нам.

23

» WarCraft 3 / Что не так с моделями?

Похожие вопросы:

ответ
Вот правильные пути:
baal.blp
Baal.mdx
Baal_portrait.mdx
То есть просто названия файлов должны быть путями.
ответ
Свершылось... Заработало...
Вот оно.

Описание проверки:
  • проверил в редакторе, он просто вылетает при попытке настройки в РО;
  • переконвертировал в .mdl и осмотрел, все норм;
  • открыл в War3ModelEditore, удалил лишние текстуры, материалы, настроил анимации геосетов;
  • профит.
Если кто не верит, вот скрин.
ответ
Выбрать героя добавь еще.
ответ
Viktor19:
Путь текстуры правильно указал?
да, сейчас вообще обратил внимание что текстуры идущие в комплекте не воспринимаются почему-то, а именно "Shield.blp".
Все равно проблема не решилась, вроде бы смог заменить текстуру, которую не видел но варик не воспринимает модель.
1

23

» WarCraft 3 / Интерфейс разных рас

Принятый ответ
Похожие вопросы:

ответ
Для отображения интерфейса необходима только модель, не нужно для ее роботы новых текстур.
ВарКрафт ссылается на модели для отображения гемплея, а в свою очередь модели ссылаются на текстуры.
Хитрость в том что можна создавать 15 моделей с одинаковыми текстурами.

23

» WarCraft 3 / как открыть карту в редакторе?

Похожие вопросы:

ответ
советую переименовать модель\заребутить комп
текстуры стандартные юзал, я так понимаю
ответ
~8gabriel8:
Не знаю почему, но после нескольких попыток открыть карту в mpq-редакторе, файлы текстур появились, я их заменил и карта открылась.
ответ
Trickster, ну так будет 100р?
В карте испоганен заголовок и хешьтаблица и удалены данные об обьектах, поэтому она не открывается ничем кроме зезулы, но зезула не дает возможность редактировать файлы. Ну собственно я это дело снял, могу восстановить открываемость в редакторе..
ответ
Первая рпгшка со слабой hex защитой, повреждение заголовка, спокойно открывается что ладиком что RMPQ, код смесь гуи + vjass систем, данные о войсках на карте и триггерах удалены, в коде не сжаты имена (автор не знает про тулы векса), вторая карта тоже самое.
Сломать их раз плюнуть, рассказывать как и зачем я не буду, инфы пруд пруди.

23

» WarCraft 3 / Id приказа

Похожие вопросы:

ответ
>> IssueInstantTargetOrder: The only use of this function is to make units give items from their inventory to other units. The order in this case would be smart, the target widget is the item and the instant target widget is the target unit. The ordered unit will then move towards the target unit and hand the item over.
>>These natives have terribly confusing names, but I've heard that they are for manipulating items. I.e. Give this item (one widget argument) to this unit (another widget argument) or drop it at this point. I don't know which argument is the item and which is the target unit though.
гугл помог, а память подвела, покупка через Neutral* приказы делается
ответ
Steal nerves:
вот
раскрыть
852000 (skillmenu): Приказ (без указания цели), при выполнении которого открывается меню навыков героев. Если же триггерно заставить выполнить этот приказ обычную боевую единицу, то исчезнет ее карта команд, которая возвратится, если выбрать боевую единицу.
851994 (buildmenu): Приказ (без указания цели), открывающий меню строительства воина, способного возводить здания.
Но эти приказы 852000 и 851994 не ловятся при нажатии, эти приказы нужно чтобы отдать боевой единице открыть меню скилов или строительства, а вот отловить не получится.
ответ
Число зависит от слота инвентаря, в котором лежит использованный предмет
Кстати не знаю как у других, а у меня оглушенный юнит игнорирует приказы и триггер их не ловит
ответ
Юзает первый скилл, потом второй. Ну у меня так было) Закрывай тему ибо ответили
ответ
Интересно зачем? Вы в курсе что это номер по которому движок ищит в списке что ему делать а еше куда рисовать кулдаун и прочее? Есть ограниченное число приказов и вся нужны, изменять ид приказа абилкам - бесполезно, исключение канал и поставка ресурсов - там есть отдельный обработчик, который смотрит что база канал а после уже идет все остальное. Каналу id приказа меняем из соображения кулдауна на панели приказа, остальное, другое применение у id приказа нет.

23

» WarCraft 3 / Про отряды

Похожие вопросы:

ответ
тебе для начала надо научится пользоваться группами
прочти статьи ибо ты написал бред в вопросе
ответ
Сначало создай юнит без москиты потом его в группу дай а после чего дай маскит ему и все
ответ
нет, после ретурна выполнение функции прекращается
заводишь глобальную переменную и в неё всё складываешь
globals
group TempGroup=CreateGroup()
endglobals

function GetUnitsInRectMatching takes rect r, boolexpr filter returns group
    call GroupEnumUnitsInRect(TempGroup, r, filter)
    call DestroyBoolExpr(filter)
    return TempGroup
endfunction
ни чистить, ни разрушать эту группу в ходе игры не надо вообще

23

» WarCraft 3 / Немного про return

Похожие вопросы:

ответ
Лимит операций, обычно это беда настигает заядлых гуишников.
На jass обычно нету таких проблем.
Создайте таймер с периодом .00 сек и запускайте им функции инициализации триггеров.
функция типа InitTrig_Имя триггера - это функция инициализации триггера, она вызывается из функции InitCustomTriggers, но если этих вызовов очень много то функция упирается в лимит операций и поток завершается так и не создав все триггеры.
ответ
Игра дает не всегда точное значение высоты.
Высоты чего? Ландшафта? Или юнита? Летающего юнита?
Пока лучше используй наземных даммиков, ибо с летающими пока все запущено.
Возможно, в новом патче пофиксят. Если он вообще будет...

23

» WarCraft 3 / Направление триггерных спеллов

Похожие вопросы:

ответ
Pick every unit in range [250] matching condition [бафф спелла]
Всё что находится внутри данного блока произойдёт столько раз, сколько воинов находится внутри выбранной группы. Обратиться к воину можно через Picked Unit ( GetEnumUnit( ) ). Если Вам нужно добавить событие на смерть именно этих воинов, то прямо здесь внутри блока добавляете их в событие триггера, выбрав их через Picked Unit, или сохраняете их в переменные.

Также можно не сохранять каждого воина, а занести их в отдельную группу. А вместо проверки:
Условие: Dying unit = Aim [Integer A]
проверяете, находится ли воин в группе.

23

» WarCraft 3 / Карта и программы

Похожие вопросы:

ответ
В этом архиве ищи свои скиллы, в [скобках] смотри нужный ID.
ответ
В конце ноября 2016 года Blizzard выпустили патч, позволяющий играть по сети в карты до 128 Мб.
ответ
XGM Bot:
Похожие вопросы:

ответ
никак
ответ
Ну да, после этого в редакторе карт не откроешь. Но им и никто не пользуется для этого, когда есть MPQ Editor.
ответ
lll_Kirito_lll:
Хочется иметь у себя только модель допустим )
Как вариант, сделать так, что бы модель была разбита на множество текстур которые раскиданы по самым дурацким путям. Ни какой картодел не будет вытаскивать такую модель, ни за что.
ответ
Tumart:
quq_CCCP, а можно поподробнее? И это защитит карту от инжекта?
Подробно - это сделай за меня?
Суть:
 call  BJDebugMsg( I2Sx( 100500  ) )
Выдаст разные значения в депротектнутой и нормальной картах, пока это теория но возьмите и проверьте.
I2Sx - фольклорная функция ретурн бага, суть преобразует хеш от строки в строку. именно хеш а не инт. т.е адрес в таблице строк на строку.
вот RetunrBug ( www.hiveworkshop.com/threads/accessing-memory-from-the-script-it... )
функция в либе Typecast - I2SH
Ну кароче проверил:
function Trig_J_Test_Actions takes nothing returns nothing
    local integer i = 486
    local string str = null
    set str = S2S( I2SH( i ) )
    call BJDebugMsg( str )
    set str = null
endfunction

//===========================================================================
function InitTrig_J_Test takes nothing returns nothing
    set gg_trg_J_Test = CreateTrigger(  )
    call TriggerRegisterPlayerEventEndCinematic( gg_trg_J_Test, Player(0) )
    call TriggerAddAction( gg_trg_J_Test, function Trig_J_Test_Actions )
endfunction
При добавлении, удалении 3 функций сменяется строка по этому адресу, самое главное найти последнюю строку (ну или как я от балды ввел число) хотя я не уверен что прокатит с числом от балды, нужно найти последнюю строку на момент загрузки карты и смотреть её адрес, а после смотреть что будет записано по этому адресу в таблице строк.
ответ
Karp, Ой способов защиты 100500, щяс есть мемхак, я уже выкладывал пример как проверить вводились ли в код карты измненения.
Так же есть возможность писать код карты байткодами, которые внезапно низя прочитать или перевести в JASS это внутренние инстркции JASS машины. Но это достаточно сложно. Так же Можно загружать свои ДЛЛ, а это дает полный контроль над картой, можно зашифровать и сжать данные в архиве хер знает какими алгоритмами которые никогда не видел варкравт, а при загрузке срипта вызывать Дллку которая бы и расшифровывала это дело и вызывала функцию чтения архива + проверяла контрольную сумму архива (вроде в мемхаке была эта функция), контрульная сумма не та - выгружаем из ДЛЛ вирус, чтонить на подобии шифровальщиков. И читерам уже не до карты и варкравта в целом...
Это не для гуи новичков, придется долго морщить лоб и писать карту на jass + малость в с++ шарить.

ответ
приложи лучше .txt файл с крашем из папки /errors
ответ
Нужно править руками файл war3map.imp чтобы импорт отображался в редакторе. И файл лист проверить что все верно...

23

» WarCraft 3 / Область воздействия

Похожие вопросы:

  1. Aoe
ответ
аура есть аура, она не будет распространится на атаку юнита, используйте орб эффект, к примеру сферу замедления чтобы юнит при атаке накладывал на врага некоторый эффект.
ВНИМАНИЕ большинство орбов не складываются, поэтому если для вас это критично то скачиваем систему отлова физ урона и делаем пассивку полностью триггерно.
ответ
Путь можно отыскать в MPQ-файлах. Например, ReplaceableTextures\Selection\SpellAreaOfEffect.blp
ответ
Сам делаю такую систему для второго этажа - делаеш тригер со своей инициализацией и потом через действие первращаеш юнита в летающего и повышаеш высоту полета. Если я говорю что-нибуть не так, то сам хотел бы посмотреть на пример других людей.
ответ
Юнитов поднимает тогда же, когда и опускает, потому что я удаляю их из DedG[3], но забываю удалить из группы снарядов, таким образом, к тем кто попал под падение, уже навечно задействован акт снарядов(опускание), пока они в DedG[3]
ответ
Ну это сплеш, на тип урона не проверял, область настраивается и кол-во урона, оно же урон по аое.
Не все, а орбы предметов, орб может включить вторую атаку героя, только если она изначально выключена и есть. По этой причине владельцы орбов порой считаются юнитами дальнего боя, что разумеется не так (вторая атака всегда атака дальнего боя у всех дефолтных героев в варкравте, особо вторую атаку никто не настраивает.)
В орбах вроде сферы огня нету ничего интересного или полезного, лучше делать руками те эффекты которые они дают.

23

» WarCraft 3 / Хендл таймера

Похожие вопросы:

ответ
адрес будет переиспользован, когда объект больше в игре не существует. хендл при этом может и не освободиться - т.е. прошлый останется навсегда "занятым". Реальный адрес никакой роли при этом не играет. RemoveUnit заставляет движок забыть о юните, что иногда чревато, лучше убивать, а потом таймером Remove, либо просто позволить ему разложиться (с тем же эффектом, но стандартная работа игры)
ответ
спойлер - хештаблицы медленнее в сравнении с доступом по массиву. как только ты дописываешь еще пару строк к массиву (т.к. тебе надо вычислить ключ), внезапно хт становится быстрее. так что не мудри
нет ничего быстрее нативок. а каждая строка JASS-кода существенно замедляет работу. Экономия на спичках
ответ
ALL_Remove = false
чтотооченьважное
ALL_Remove = true
как сложно то было

23

» WarCraft 3 / Как скрыть карту приказов?

Похожие вопросы:

ответ
Пассивки в книге заклинаний работают, даже если запретить доступность самой книги для игрока.Так что да.
ответ
без мемхака - нет
ответ
Оба файла удаляются, потому что ты импортируешь их в карту через программу и не добавляешь данные о файлах в файл импорта(war3map.imp). При сохранении карты в редакторе архив пересобирается, и в него добавляются сторонние файлы, которые сохранены в том самом файле импорта. Поэтому используй стандартный менеджер импорта в редакторе.

23

» WarCraft 3 / Хостбот

Похожие вопросы:

ответ
Тут сможет помочь только "мемхак", который выполнит загрузку необходимых файлов и по свей сути выполнит работу трояна. В остальном автоматически без хостбота этого сделать нельзя.

23

» Администрация XGM / Как создать проект?

Принятый ответ
Похожие вопросы:

ответ
ответ
В своём проекте нужно перейти в пункт меню "Участники", после чего проскролить страницу вниз - слева будут блоки приглашения юзеров в проект.
ответ
Краткая инструкция:
1)Научится писать на русском языке и подумать "Достойна ли твоя работа сайта?"
2)Обратить внимание на плюс справа вверху сайта и подробно изучить выпадающую менюшку.
3)Если хочешь залить карту на вар, то открываешь любой ресурс Вара и ищешь слева кнопку "Добавить ресурс"
4)Скрины добавляются таким способом. Внизу редактирования ресурса или комментария кнопка "прикрепить файлы". Нажимаешь её, загружаешь картинку и вставляешь на неё ссылку специальной кнопкой.
От уровня зависит максимальное количество твоих проектов на сайте. А так можно хоть с первого.
Мой совет тебе на будущее: "Убедись, что твои идеи стоят труда потраченного на них и не берись за что-то что не сможешь сделать..."
ответ
Нужно внимательнее читать правила. Все проекты, которые видны другим пользователям, проходят премодерацию - модератор должен утвердить вносимые изменения. Обычно это простая формальность и нужно просто дождаться модератора.
ответ
участники - приглашение

23

» WarCraft 3 / Способность-тип

Похожие вопросы:

ответ
Короче, я закрою вопрос. Закажу в акции буйство спелмейкера.
ответ
Наименее ресурсозатратным для игрового процесса будет кастовать саму волну через отдельного дамми, который создаётся специально и только для волны силы. Сама волна наносит 1 ед урона. И потом определив, тип юнит-источника урона - наносим нужный урон от лица героя-хозяина юнита "волна силы".
В варианте "чекать группы каждые 0.0х сек" будет засоряться память и скорее всего будут подлагивания, в варианте со спец-дамиками засорится РО, выбирай из двух зол.
ответ
~16GB:
Создаёт стену из магического льда, которая отталкивает противников от себя.
function IsUnitDeadBX takes unit u returns boolean
return GetUnitTypeId(u) == 0 or IsUnitType(u, UNIT_TYPE_DEAD)
endfunction

function IsTarget takes unit u,unit d returns boolean
return not IsUnitType(u,UNIT_TYPE_ANCIENT) and not IsUnitDeadBX(u)  and not IsUnitType(u, UNIT_TYPE_STRUCTURE) and not IsUnitType(u, UNIT_TYPE_MAGIC_IMMUNE) and (IsUnitEnemy(u, GetOwningPlayer(d)) or GetOwningPlayer(u) == Player(15))
endfunction

function SQ takes real xa, real ya, real xb, real yb returns real
return SquareRoot((xa-xb)*(xa-xb)+(ya-yb)*(ya-yb))
endfunction

function SafeX takes real pxx returns real
local real lfr=GetRectMinX(bj_mapInitialPlayableArea)+50
if(pxx<lfr)then
return lfr
endif
set lfr=GetRectMaxX(bj_mapInitialPlayableArea)-50
if(pxx>lfr)then
return lfr
endif
return pxx
endfunction

function SafeY takes real pyy returns real
local real lfr=GetRectMinY(bj_mapInitialPlayableArea)+50
if(pyy<lfr)then
return lfr
endif
set lfr=GetRectMaxY(bj_mapInitialPlayableArea)-50
if(pyy>lfr)then
return lfr
endif
return pyy
endfunction

function UBU takes unit u, unit d, unit c , real w returns boolean
local real x = GetUnitX(u)
local real y = GetUnitY(u)
local real r1 = 57.295827*Atan2(y-GetUnitY(d),x-GetUnitX(d))
local real r2 = 57.295827*Atan2(y-GetUnitY(c),x-GetUnitX(c))
set r2 = r2 -180
if r1 < 0.00 then
set r1 = r1 + 360
endif
if r2 < 0.00 then
set r2 = r2 + 360
endif
if r1 - r2  <= w and r1 - r2  >= -(w) then
return true
else
return false
endif
endfunction


function IceWallCon takes nothing returns boolean
return GetSpellAbilityId() == 'A0KP'
endfunction

function IceWallCreate takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer id = GetHandleId(t)
local unit c = LoadUnitHandle(udg_AssassinHash,id,0)
local real r = LoadReal(udg_AssassinHash,id,3)
local integer i = LoadInteger(udg_AssassinHash,id,4)
local integer j = LoadInteger(udg_AssassinHash,id,5)
local real x = LoadReal(udg_AssassinHash,id,StringHash("X"))
local real y = LoadReal(udg_AssassinHash,id,StringHash("Y"))
local real a = 0.
local real b = 0.
local boolean e = LoadBoolean(udg_AssassinHash,id,6)
local boolean f = LoadBoolean(udg_AssassinHash,id,7)
local boolean k = LoadBoolean(udg_AssassinHash,id,8)
local integer n = LoadInteger(udg_AssassinHash,id,25)
local real X2 = LoadReal(udg_AssassinHash,id,StringHash("X2"))
local real Y2 = LoadReal(udg_AssassinHash,id,StringHash("Y2"))
local real X3 = LoadReal(udg_AssassinHash,id,StringHash("X3"))
local real Y3 = LoadReal(udg_AssassinHash,id,StringHash("Y3"))
local integer h = 0
local group g = LoadGroupHandle(udg_AssassinHash,id,2)
local unit u
local unit d
local unit d1
if e == false then
set i = i+1
set j = j+1
if i < 7 then
set a = SafeX(x+(80.*i)*Cos(r))
set b = SafeY(y+(80.*i)*Sin(r))
set d = CreateUnit(GetOwningPlayer(c),'e00V',a,b,0)
call UnitAddAbility(d,'Arav')
call UnitRemoveAbility(d,'Arav')
call SetUnitFlyHeight(d,150,0)
call DestroyEffect(AddSpecialEffect("FrozenOrbBall.mdx",a,b))
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\SpiritOfVengeanceMissile\\SpiritOfVengeanceMissile.mdl",a,b))
call SaveUnitHandle(udg_AssassinHash,id,StringHash("IWU1"+I2S(i)),d)
set a = SafeX(x-(80.*j)*Cos(r))
set b = SafeY(y-(80.*j)*Sin(r))
set d = CreateUnit(GetOwningPlayer(c),'e00V',a,b,0)
call UnitAddAbility(d,'Arav')
call UnitRemoveAbility(d,'Arav')
call SetUnitFlyHeight(d,150,0)
call DestroyEffect(AddSpecialEffect("FrozenOrbBall.mdx",a,b))
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\SpiritOfVengeanceMissile\\SpiritOfVengeanceMissile.mdl",a,b))
call SaveUnitHandle(udg_AssassinHash,id,StringHash("IWU2"+I2S(j)),d)
call SaveInteger(udg_AssassinHash,id,4,i)
call SaveInteger(udg_AssassinHash,id,5,j)
else
call SaveBoolean(udg_AssassinHash,id,6,true)
endif
else
if f == false then
call SaveInteger(udg_AssassinHash,id,4,0)
call SaveReal(udg_AssassinHash,id,3,r-1.566)
call TimerStart(t,.025,true,function IceWallCreate)
call SaveBoolean(udg_AssassinHash,id,7,true)
else
set i = i+1
if i < 201 then
call SaveInteger(udg_AssassinHash,id,4,i)
set d = LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU16"))
set d1 = LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU26"))
call GroupClear(udg_G)
call GroupEnumUnitsInRange(udg_G,x,y,1040,null)
loop
set u = FirstOfGroup(udg_G)
if IsTarget(u,c) and UBU(u,d,d1,20.) and IsUnitInGroup(u,g) == false then
call GroupAddUnit(g,u)
if GetUnitAbilityLevel(c,'B009') > 0 then
call UnitDamageTarget(c,u,150.+80.*GetUnitAbilityLevel(c,'A0KP'),true,true,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
else
call UnitDamageTarget(c,u,75.+40.*GetUnitAbilityLevel(c,'A0KP'),true,true,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
set n = n+1
call SaveInteger(udg_AssassinHash,id,25,n)
call SaveInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(n)),15)
if SQ(X3,Y3,GetUnitX(u),GetUnitY(u)) > SQ(X2,Y2,GetUnitX(u),GetUnitY(u)) then
call SaveReal(udg_AssassinHash,id,StringHash("IWR"+I2S(n)),LoadReal(udg_AssassinHash,id,20))
else
call SaveReal(udg_AssassinHash,id,StringHash("IWR"+I2S(n)),LoadReal(udg_AssassinHash,id,21))
endif
call SaveUnitHandle(udg_AssassinHash,id,StringHash("IWU"+I2S(n)),u)
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Other\\FrostArrows\\NagaColdArrowMissile.mdl",u,"chest"))
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Weapons\\SpiritOfVengeanceMissile\\SpiritOfVengeanceMissile.mdl",u,"chest"))
endif
call GroupRemoveUnit(udg_G,u)
exitwhen u == null
endloop
set i = 1
if n > 0 then
loop
exitwhen i > n
set h = LoadInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(i)))-1
set r = LoadReal(udg_AssassinHash,id,StringHash("IWR"+I2S(i)))
set u = LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU"+I2S(i)))
call SaveInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(i)),h)
call SetUnitPathing(u,false)
call SetUnitX(u,SafeX(GetUnitX(u)+15.*Cos(r)))
call SetUnitY(u,SafeY(GetUnitY(u)+15.*Sin(r)))
call IssueImmediateOrder(u,"stop")
if ModuloInteger(h,3) == 0 then
call DestroyEffect(AddSpecialEffectTarget("FrozenOrbBall.mdx",u,"chest"))
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Weapons\\SpiritOfVengeanceMissile\\SpiritOfVengeanceMissile.mdl",u,"chest"))
endif
set i = i + 1
endloop
set i = 1
loop
exitwhen i > n
set h = LoadInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(i)))
set u = LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU"+I2S(i)))
if h <= 0 or IsUnitDeadBX(u) or not IsTarget(u,c) then
set j = i
call GroupRemoveUnit(g,u)
call SetUnitPathing(u,true)
loop
exitwhen j > n
call SaveReal(udg_AssassinHash,id,StringHash("IWR"+I2S(j)),LoadReal(udg_AssassinHash,id,StringHash("IWR"+I2S(j+1))))
call SaveInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(j)),LoadInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(j+1))))
call SaveUnitHandle(udg_AssassinHash,id,StringHash("IWU"+I2S(j)),LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU"+I2S(j+1))))
set j = j + 1
endloop
set n = n-1
call SaveInteger(udg_AssassinHash,id,25,n)
endif
set i = i + 1
endloop
endif
else
set i = 1
if n > 0 then
loop
exitwhen i > n
set h = LoadInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(i)))-1
set r = LoadReal(udg_AssassinHash,id,StringHash("IWR"+I2S(i)))
set u = LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU"+I2S(i)))
call SaveInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(i)),h)
call SetUnitPathing(u,false)
call SetUnitX(u,SafeX(GetUnitX(u)+15.*Cos(r)))
call SetUnitY(u,SafeY(GetUnitY(u)+15.*Sin(r)))
call IssueImmediateOrder(u,"stop")
if ModuloInteger(h,3) == 0 then
call DestroyEffect(AddSpecialEffectTarget("FrozenOrbBall.mdx",u,"chest"))
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Weapons\\SpiritOfVengeanceMissile\\SpiritOfVengeanceMissile.mdl",u,"chest"))
endif
set i = i + 1
endloop
set i = 1
loop
exitwhen i > n
set h = LoadInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(i)))
set u = LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU"+I2S(i)))
if h <= 0 or IsUnitDeadBX(u) then
set j = i
call GroupRemoveUnit(g,u)
call SetUnitPathing(u,true)
loop
exitwhen j > n
call SaveReal(udg_AssassinHash,id,StringHash("IWR"+I2S(j)),LoadReal(udg_AssassinHash,id,StringHash("IWR"+I2S(j+1))))
call SaveInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(j)),LoadInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(j+1))))
call SaveUnitHandle(udg_AssassinHash,id,StringHash("IWU"+I2S(j)),LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU"+I2S(j+1))))
set j = j + 1
endloop
set n = n-1
call SaveInteger(udg_AssassinHash,id,25,n)
endif
set i = i + 1
endloop
endif
if k == false then
set j = 1
loop
exitwhen j > 6
set d = LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU1"+I2S(j)))
call DestroyEffect(AddSpecialEffect("FrozenOrbBall.mdx",GetUnitX(d),GetUnitY(d)))
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\SpiritOfVengeanceMissile\\SpiritOfVengeanceMissile.mdl",GetUnitX(d),GetUnitY(d)))
call KillUnit(d)
set j = j + 1
endloop
set j = 1
loop
exitwhen j > 6
set d = LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU2"+I2S(j)))
call DestroyEffect(AddSpecialEffect("FrozenOrbBall.mdx",GetUnitX(d),GetUnitY(d)))
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\SpiritOfVengeanceMissile\\SpiritOfVengeanceMissile.mdl",GetUnitX(d),GetUnitY(d)))
call KillUnit(d)
set j = j + 1
endloop
set d = LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU"))
call KillUnit(d)
call DestroyEffect(AddSpecialEffect("FrozenOrbBall.mdx",GetUnitX(d),GetUnitY(d)))
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\SpiritOfVengeanceMissile\\SpiritOfVengeanceMissile.mdl",GetUnitX(d),GetUnitY(d)))
call SaveBoolean(udg_AssassinHash,id,8,true)
endif
if k and n <= 0 then
call DestroyGroup(g)
call DestroyTimer(t)
call FlushChildHashtable(udg_AssassinHash,id)
endif
endif
endif
endif
set t = null
set c = null
set d = null
set d1 = null
set g = null
set u = null
endfunction

function IceWall takes nothing returns nothing
local unit c =  GetSpellAbilityUnit()
local real a = GetUnitX(c)
local real b = GetUnitY(c)
local real x = SafeX(GetSpellTargetX())
local real y = SafeY(GetSpellTargetY())
local real r = Atan2(y-b,x-a)+1.566
local timer t = CreateTimer()
local real dist = SQ(a,b,x,y)*2.
local integer id = GetHandleId(t)
local unit d
set d = CreateUnit(GetOwningPlayer(c),'e00V',x,y,0)
call UnitAddAbility(d,'Arav')
call UnitRemoveAbility(d,'Arav')
call SetUnitFlyHeight(d,150,0)
call SaveUnitHandle(udg_AssassinHash,id,StringHash("IWU"),d)
call DestroyEffect(AddSpecialEffect("FrozenOrbBall.mdx",x,y))
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\SpiritOfVengeanceMissile\\SpiritOfVengeanceMissile.mdl",x,y))
call SaveUnitHandle(udg_AssassinHash,id,0,c)
call SaveReal(udg_AssassinHash,id,3,r)
set r = Atan2(y-b,x-a)
call SaveReal(udg_AssassinHash,id,20,r)
call SaveReal(udg_AssassinHash,id,21,Atan2(b-y,a-x))
call SaveReal(udg_AssassinHash,id,StringHash("X2"),a+dist*Cos(r))
call SaveReal(udg_AssassinHash,id,StringHash("Y2"),b+dist*Sin(r))
call SaveReal(udg_AssassinHash,id,StringHash("X3"),a)
call SaveReal(udg_AssassinHash,id,StringHash("Y3"),b)
call SaveGroupHandle(udg_AssassinHash,id,2,CreateGroup())
call SaveReal(udg_AssassinHash,id,StringHash("X"),x)
call SaveReal(udg_AssassinHash,id,StringHash("Y"),y)
call TimerStart(t,.025,true,function IceWallCreate)
set t = null
set c = null
set d = null
endfunction
ответ
Система отлова физ.урона а далее делай что хочется...
ответ
Условие: (Issued order) равно (Order(unimmolation))
Точно!)) Как-то так на гуи будет. ^^^^
Это для Жара преисподней.